home *** CD-ROM | disk | FTP | other *** search
- { CPU }
-
- { Determines the CPU and Math Co-processor }
-
- { Copyright 1989 by Mark R. Boler - All Rights Reserved }
-
- {-----------------------------------------------------------------------------}
-
- {$A-}
- {$B-} { Boolean complete evaluation off }
- {$D+} { Debug information on }
- {$I-} { I/O checking off }
- {$L+} { Local symbols on }
- {$N-} { No numeric coprocessor }
- {$R-} { Range checking off }
- {$S-} { Stack checking off }
- {$V-} { No VAR-String checks }
-
- UNIT CPU;
-
- INTERFACE
-
- FUNCTION CPUInfo: WORD;
-
- FUNCTION MainProcessor: STRING;
-
- FUNCTION MathProcessor: STRING;
-
- IMPLEMENTATION
-
- CONST
- NotTested = $FFFF;
-
- CPUID: WORD = NotTested;
-
- FUNCTION CPUInfo: WORD; EXTERNAL;
-
- {$L CPU.OBJ}
-
- FUNCTION MainProcessor: STRING;
-
- VAR
- St: STRING[23];
-
- BEGIN {MainProcessor}
- IF (CPUID = NotTested) THEN CPUID:= CPUInfo;
- CASE (CPUID AND $000F) OF
- 0: St:= '8088';
- 1: St:= '8086';
- 2: St:= 'V20';
- 3: St:= 'V30';
- 4: St:= '80188';
- 5: St:= '80186';
- 6,7: St:= '80286';
- 8,9: St:= '80386';
- ELSE St:= 'Unknown';
- END; {case}
- CASE (CPUID AND $000F) OF
- 0, 1,
- 4..9: INSERT('intel ', St, 1);
- 2, 3: INSERT('NEC ', St, 1);
- END; {case}
- IF (CPUID >= 128) THEN INSERT('Defective ', St, 1);
- MainProcessor:= St;
- END; {MainProcessor}
-
- FUNCTION MathProcessor: STRING;
-
- VAR
- St: STRING[51];
-
- BEGIN {MathProcessor}
- IF (CPUID = NotTested) THEN CPUID:= CPUInfo;
- CASE (CPUID AND $0030) OF
- 0: St:= 'No intel Numeric Coprocessor Detected';
- 16: St:= '8087';
- 32: St:= '80287';
- 48: St:= '80387';
- END; {case}
- IF (CPUID AND $0040) <> 0 THEN
- BEGIN
- IF ((CPUID AND $0030) > 0) THEN INSERT('intel ', St, 1);
- INSERT('Weitek 1167, ', St, 1);
- END; {if}
- MathProcessor:= St;
- END; {MathProcessor}
-
- END. {CPUID}